/**
 * RequetesClient.java    19/04/2012
 */

package l3.info.Projet.Client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import l3.info.Projet.RMI.RequetesReseau;

/**
 * Permet la passerelle Client - Serveur via RMI
 * @author Aboulkacem Hamid & loïc Martinez
 */
public class RequetesClient {

    /** Connexion avec le ServeurRequetes */
    private static RequetesReseau connexionServer = null;

    /**
     * Constructeur par défaut
     * @throws MalformedURLException, si problème durant le lookup
     * @throws RemoteException, si problème via RMI
     */
    public RequetesClient() throws NotBoundException {
        if (connexionServer == null) {
            try {
                connexionServer = (RequetesReseau) Naming.lookup("serveur");
            } catch (MalformedURLException ex) {
                ex.printStackTrace();
            } catch (RemoteException ex) {
                ex.printStackTrace();
            }
        }
    }

    /**
     * @return connexionServer
     */
    public RequetesReseau getReseau() {
        return connexionServer;
    }

    /**
     * Permet de savoir si un utilisateur existe dans la base de données
     * (numUtilisateur et mot de passe)
     * @param u, l'utilisateur en question
     * @return l'utilisateur remplit avec des données supplémentaires
     *         s'il existe, tel quel sinon
     */
    public Utilisateur envoyerUtilisateur(Utilisateur u) {
        try {
            return getReseau().utilisateurExists(u);
        } catch (RemoteException e) {
            System.err.println("Echec d'envoi \n"+ e.getMessage());
        }
        return u;
    }

    /**
     * Permet de suivre un autre utilisateur
     * @param myId, mon numUtilisateur
     * @param id, le numUtilisateur de la personne à suivre
     * @return le pseudo de la personne à suivre,
     *         ou null si un problème survient
     */
    public String envoyerNumUtilisateur(int myId, int id) {
        try {
            return getReseau().suivreUtilisateur(myId, id);
        } catch (RemoteException e) {
            System.err.println("Echec d'envoi \n"+ e.getMessage());
        }
        return null; // Problème d'envoi via RMI
    }

    /**
     * Permet d'arrêter de suivre un utilisateur
     * @param myId, mon numutilisateur
     * @param idToDelete, le numUtilisateur de l'utilisateur
     *        que l'on ne veut plus suivre
     */
    public void removeNumUtilisateur(int myId, int idToDelete) {
        try {
            getReseau().removeUser(myId, idToDelete);
        } catch (RemoteException e) {
            System.err.println("Echec d'envoi \n"+ e.getMessage());
        }
    }
}